package com.mac.mapper;

import com.mac.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;

import java.util.ArrayList;

public interface UserMapper {

    /**
     *  检查用户是否存在
     * @param username 用户姓名
     * @return 返回用户对象
     */
    @Select("select * from users where username = #{username}")
    @ResultMap("userResultMap")
    User ifUserExists(String username);

    /**
     * 根据用户id返回用户对象
     * @param userId 用户id
     * @return 返回用户对象
     */
    @Select("select * from users where user_id = #{userId}")
    @ResultMap("userResultMap")
    User selectByUserId(@Param("userId") int userId);

    /**
     * 用于核查用户输入的账号密码
     * @param username 用户账号
     * @param password 用户密码
     * @return 返回User类
     */
    @Select("select * from users where username = #{username} and password = #{password}")
    @ResultMap("userResultMap")
    User checkUser(@Param("username") String username,@Param("password") String password);

    /**
     * @param user 输入用户的对象进行添加用户
     * @return
     */
    boolean addUser(User user);

    /**
     *  对用户进行注销
     * @param username 用户账号
     */
    @Delete("delete from users where username = #{username}")
    boolean deleteUser(String username);

    /**
     * 对用户信息进行更改
     * @param user 输入User类
     */
    boolean changeUserInfo(User user);


    /**
     * 检查用户手机号 telephone是否存在
     * @Param 用户手机号
     * @return
     */
    @Select("select * from users where telephone=#{telephone}")
    @ResultMap("userResultMap")
    User checkTelephone(String telephone);
    /**
     * 根据当前用户名查找用户
     * @Param username用户名
     */
    @Select("select * from users where username=#{username}")
    @ResultMap("userResultMap")
    User selectByUsername(String username);









    /**
     * 返回所有用户信息
     * @return 返回ArrayList<User>
     */
    @Select("select * from users")
    @ResultMap("userResultMap")
    ArrayList<User> selectAll();

    /**
     * 批量删除
     * @param ids
     */
    boolean deleteByIds(@Param("ids") int[] ids);

    /**
     * 分页查询
     * @param begin 从哪里开始
     * @param size 每次展示几个用户
     * @return 返回 ArrayList<User>
     */
    @Select("select * from users limit #{begin} , #{size}")
    @ResultMap("userResultMap")
    ArrayList<User> selectByPage(@Param("begin") int begin, @Param("size") int size);

    /**
     * 查询总记录数
     * @return
     */
    @Select("select count(*) from users")
    Integer selectTotalCount();

    /**
     * 分页条件查询
     * @param begin
     * @param size
     * @return
     */
    ArrayList<User> selectByPageAndCondition(@Param("begin") int begin,@Param("size") int size,@Param("user") User user);

    /**
     * 根据条件查询总记录数
     * @return 总记录数
     */
    Integer selectTotalCountByCondition(@Param("user") User user);
}
